#include<iostream>
#include<string>
#include"Buffer.hpp"

int main()
{

    Buffer buf;
    std::string data = "Hello, world!";
    buf.Write(data.c_str(),data.size());
    std::string arr;
    arr.resize(data.size());
    /*
    在C++中，std::string 的 operator[]（即 arr[0]）允许你访问字符串中已存在的字符，
    但它不会自动扩展字符串的大小。如果你尝试通过 arr[0] 写入数据到一个空字符串或大小不足的字符串中，
    会导致未定义行为（Undefined Behavior），因为你实际上是在访问或修改未分配的内存。
    安全写入：buf.Read(&arr[0], data.size()) 的目的是将 buf 中的数据写入 arr 的内存中。
    &arr[0] 是 arr 内部字符数组的起始地址，但前提是 arr 已经分配了足够的内存（通过 resize 实现）。
    否则，写入操作会越界。
    */
    buf.Read(&arr[0],data.size());
    std::cout<<arr<<std::endl;


    // Buffer buf;
    // std::string data = "Hello, world!";
    // buf.Write(data.c_str(),data.size());
    // char arr[1024];
    // buf.Read(&arr[0],data.size());
    // for(int i=0;i<data.size();i++){
    //     std::cout<<arr[i];
    // }
    // std::cout<<std::endl;
    // std::string data2 = "hello haha";
    // buf.ReadAndMove(&arr[data.size()],data.size());
    // for(int i=0;i<data.size()*2;i++){
    //     std::cout<<arr[i];
    // }
    // std::cout<<std::endl;
    // buf.Write(data2.c_str(),data2.size());
    // buf.Read(arr,data2.size());
    // for(int i=0;i<data2.size();i++){
    //     std::cout<<arr[i];
    // }
    // std::cout<<std::endl;
    // std::string data3 = "-------------";
    // buf.Write(data3.c_str(),data3.size());
    // buf.Read(arr,data3.size()+data2.size());
    // for(int i=0;i<data3.size()+data2.size();i++){
    //     std::cout<<arr[i];
    // }
    // std::cout<<std::endl;
    return 0;
}
